/**
 * 获取手机内置存储路径
 */
const root = () => {
  const environment = plus.android.importClass("android.os.Environment");
  const externalStorageDirectory = environment.getExternalStorageDirectory();
  return externalStorageDirectory;
};

/**
 * 获取手机外置存储路径
 * @param {string} path 文件夹路径
 * @return {Array<string>} 文件和文件夹列表
 */
const filelist = (dir: string = "") => {
  const File = plus.android.importClass("file");
  const list = [];
  const file = new File(dir);
  const tempList = file.listFiles();
  for (let i = 0; i < tempList.length; i++) {
    const fileName = tempList[i].getName();
    list.push(fileName);
  }
  return list;
};

/**
 * 创建新文件
 *
 * 该函数通过使用Java的File类在指定路径上尝试创建一个新文件如果文件已存在，则不创建新文件
 *
 * @param path {string} - 文件路径，默认为空字符串如果未提供路径，则在当前目录下尝试创建文件
 * @returns {boolean} - 如果成功创建文件，则返回true；如果文件已存在或其他原因导致创建失败，则返回false
 */
const createNewFile = (path: string = "") => {
  // 导入Java的File类，用于文件操作
  const File = plus.android.importClass("java.io.File");

  // 根据提供的路径创建File对象
  const file = new File(path);

  // 检查文件是否已存在
  if (!file.exists()) {
    // 如果文件不存在，则尝试创建新文件并返回创建结果
    return file.createNewFile();
  }

  // 如果文件已存在，则返回false表示无需创建
  return false;
};

const mkdirs = (path: string = "") => {
  const File = plus.android.importClass("java.io.File");
  const file = new File(path);
  if (!file.exists()) {
    return file.mkdirs();
  }
  return false;
};

/**
 * 读取文本文件内容
 *
 * @param path 文件路径，默认为空字符串如果路径为空或文件不存在，函数将返回false
 * @param charset 文件字符集，默认为'utf-8'指定字符集用于正确读取文件内容
 * @returns 返回一个包含文件内容的数组，如果文件不存在则返回false
 */
const readTxt = (path: string = "", charset = "utf-8") => {
  // 导入Java文件类，用于操作文件系统中的文件
  const File = plus.android.importClass("java.io.File");
  // 导入InputStreamReader类，用于将字节流转换为字符流
  const InputStreanReader = plus.android.importClass(
    "java.io.InputStreamReader",
  );
  // 导入BufferedReader类，用于高效读取字符流
  const BufferedReader = plus.android.importClass("java.io.BufferedReader");
  // 导入FileInputStream类，用于读取文件内容
  const FileInputStream = plus.android.importClass("java.io.FileInputStream");
  // 创建File对象，指向指定路径的文件
  const file = new File(path);
  let inputStreamReader = null;
  let bufferedReader = null;
  const list = [];
  try {
    // 检查文件是否存在，如果不存在则返回false
    if (!file.exists()) {
      return false;
    }
    // 创建InputStreamReader对象，将文件输入流转换为字符流，并指定字符集
    inputStreamReader = new InputStreanReader(
      new FileInputStream(file),
      charset,
    );
    // 创建BufferedReader对象，用于高效读取字符流
    bufferedReader = new BufferedReader(inputStreamReader);
    let line = null;
    // 循环读取文件内容，直到文件结束
    while ((line = bufferedReader.readLine()) != null) {
      // 将读取到的每一行内容添加到列表中
      list.push(line);
    }
    // 读取完成后，关闭BufferedReader和InputStreamReader
    bufferedReader.close();
    inputStreamReader.close();
  } catch (e) {
    console.log("文件读取失败：" + e);
    // 如果发生异常且BufferedReader不为空，则关闭BufferedReader
    if (bufferedReader != null) {
      bufferedReader.close();
    }
    if (inputStreamReader != null) {
      inputStreamReader.close();
    }
    return false;
  }
  return list;
};

/**
 * 将内容写入指定路径的文本文件中
 * 如果文件不存在，会自动创建新文件
 *
 * @param path 文件路径，默认为空字符串如果路径为空，将不会写入任何文件
 * @param content 要写入的内容，默认为空字符串
 * @param append 是否追加内容到文件末尾，默认为false，表示覆盖文件内容
 * @param charset 文件编码，默认为'utf-8'
 * @returns 如果文件写入成功，返回true；否则返回false
 */
const writeTxt = (
  path: string = "",
  content: string = "",
  append = false,
  charset = "utf-8",
) => {
  // 导入Java文件类，用于文件操作
  const File = plus.android.importClass("java.io.File");
  // 导入Java文件输出流类，用于写入文件
  const FileOutputStream = plus.android.importClass("java.io.FileOutputStream");
  // 导入Java输出流写入器类，用于将字符写入文件
  const OutputStreamWriter = plus.android.importClass(
    "java.io.OutputStreamWriter",
  );
  let outputStreamWriter;
  // 根据路径创建文件对象
  const file = new File(path);
  try {
    //不存在则创建新���文件
    if (!file.exists()) {
      file.createNewFile();
    }
    // 创建输出流写入器，使用指定的字符集和追加模式
    outputStreamWriter = new OutputStreamWriter(
      new FileOutputStream(path, append),
      charset,
    );
    // 将内容写入文件
    outputStreamWriter.write(content);
    // 关闭输出流写入器
    outputStreamWriter.close();
  } catch (e) {
    console.log("文件写入失败：" + e.message);
    // 如果输出流写入器不为空，则关闭它
    if (null != outputStreamWriter) {
      outputStreamWriter.close();
    }
    // 返回false表示文件写入失败
    return false;
  }
  // 返回true表示文件写入成功
  return true;
};

/** * 判断文件是否存在 * @param path 文件路径 * @return true=存在 false=不存在 */
const isFileExist = function (path = "") {
  const File = plus.android.importClass("java.io.File");
  return new File(path).exists();
};

const deleteFile = (path: string) => {
  const File = plus.android.importClass("java.io.File");
  const file = new File(path);
  if (file.exists()) {
    return file.delete();
  }
  return false;
};
export {
  root,
  filelist,
  createNewFile,
  readTxt,
  writeTxt,
  mkdirs,
  isFileExist,
  deleteFile,
};
